home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 126-150 / disk_138 / modulatools / modulatools.source / messagetools.mod < prev    next >
Text File  |  1992-05-06  |  7KB  |  132 lines

  1. (******************************************************************************)
  2. (*                                                                            *)
  3. (*  Version 1.00a.002 (Beta) :   March 2, 1988                                *)
  4. (*                                                                            *)
  5. (*    These procedures were originally written under version 1.20 of the TDI  *)
  6. (* Modula-2 compiler. I have rewritten this module to operate under the v2.00 *)
  7. (* compiler. However, should you find any problem or inconsistency with the   *)
  8. (* functionality of this code, please contact me at the following address:    *)
  9. (*                                                                            *)
  10. (*                               Jerry Mack                                   *)
  11. (*                               23 Prospect Hill Ave.                        *)
  12. (*                               Waltham, MA   02154                          *)
  13. (*                                                                            *)
  14. (*    Check the module MenuUtils for TDI's (considerably less powerful) ver-  *)
  15. (* sions of my Menu and IntuitionText procedures. The modules GadgetUtils and *)
  16. (* EasyGadgets should also be of great help.                                  *)
  17. (*                                                                            *)
  18. (******************************************************************************)
  19. (*                                                                            *)
  20. (*    The source code to MessageTools is in the public domain. You may do     *)
  21. (* with it as you please.                                                     *)
  22. (*                                                                            *)
  23. (******************************************************************************)
  24.  
  25. IMPLEMENTATION MODULE MessageTools;
  26.  
  27.  
  28. FROM Intuition       IMPORT IntuiMessagePtr, WindowPtr, Window, 
  29.                             MenuPtr, MenuItemPtr;
  30. FROM IntuiUtils      IMPORT MenuNum, ItemNum, SubNum;
  31. FROM Menus           IMPORT ItemAddress;
  32. FROM Ports           IMPORT MessagePtr, GetMsg, ReplyMsg;
  33. FROM Storage         IMPORT ALLOCATE, DEALLOCATE;
  34. FROM SYSTEM          IMPORT ADDRESS, NULL;
  35.  
  36.   
  37. (***************************************************************************)
  38. (*                                                                         *)
  39. (*    This procedure is used to obtain the next IntuiMessage from a Window *)
  40. (* in a quick and efficient manner. The procedure requires one parameter,  *)
  41. (* CurrentWindow, a pointer to the Window which you wish checked. The pro- *)
  42. (* cedure returns IMessage, a pointer to the next IntuiMessage (if any) in *)
  43. (* CurrentWindow's message queue. If a message is found, the procedure re- *)
  44. (* turns a TRUE value; otherwise, it returns a FALSE value and IMessage    *)
  45. (* points to NULL. Additionally, if no message is found, then any message  *)
  46. (* pointed to by IMessage upon input is DISPOSEd of, thus preserving the   *)
  47. (* memory required to monitor IntuiMessages.                               *)
  48. (*                                                                         *)
  49. (*    The IntuiMessage returned by the Intuition procedure GetMsg is quick-*)
  50. (* ly copied and returned to Intuition (via ReplyMsg), thus minimizing the *)
  51. (* number of IntuiMessages which Intuition must allocate. This is of con-  *)
  52. (* siderable importance, since Intuition doesn't deallocate IntuiMessages  *)
  53. (* once allocated (unless Intuition is reinitialized).                     *)
  54. (*                                                                         *)
  55. (***************************************************************************)
  56.  
  57.    PROCEDURE GotMessage (VAR IMessage  : IntuiMessagePtr;
  58.                          CurrentWindow : WindowPtr)     : BOOLEAN;
  59.  
  60.    VAR
  61.       IMsg : IntuiMessagePtr;
  62.       
  63.    BEGIN
  64.  
  65.       IF (IMessage = NIL) THEN IMessage := NULL; END;
  66.  
  67.       IMsg := GetMsg (CurrentWindow^.UserPort);             (* get message *)
  68.  
  69.       IF (IMsg <> NULL) THEN
  70.          IF (IMessage = NULL) THEN NEW(IMessage); END;
  71.          IMessage^ := IMsg^;                            (* copy message &  *)
  72.          ReplyMsg (MessagePtr(IMsg));                   (* return original *)
  73.          RETURN TRUE;
  74.       ELSE
  75.          IF (IMessage <> NULL) THEN
  76.             DISPOSE(IMessage);                         (* DISPOSE of old   *)
  77.             IMessage := NULL;                          (* messages, if any *)
  78.          END; (* IF IMessage *)
  79.          RETURN FALSE;
  80.       END; (* IF IMsg *)
  81.    END GotMessage;
  82.  
  83.  
  84. (***************************************************************************)
  85. (*                                                                         *)
  86. (*    This procedure identifies the MenuItem which a user chooses and      *)
  87. (* returns a pointer to that Item. The parameters required for input are   *)
  88. (* as follows:                                                             *)
  89. (*                                                                         *)
  90. (*    MenuSelection - (CARDINAL) either the Code field of an IntuiMessage  *)
  91. (*                    (if Class = MenuPick) or the NextSelect field of a   *)
  92. (*                    MenuItem (if several MenuItems are drag selected);   *)
  93. (*    FirstMenu     - (MenuPtr) a pointer to the FIRST Menu in the Menu    *)
  94. (*                    tree from which the selection is made.               *)
  95. (*                                                                         *)
  96. (*    The procedure returns the ChoiceType-structure MenuChoice with the   *)
  97. (* following fields set:                                                   *)
  98. (*                                                                         *)
  99. (*    MenuChosen    - (CARDINAL) the Menu containing the (Sub)Item chosen; *)
  100. (*    ItemChosen    - (CARDINAL) the Item chosen or containing the chosen  *)
  101. (*                    SubItem;                                             *)
  102. (*    SubItemChosen - (CARDINAL) the chosen SubItem, if any;               *)
  103. (*    ChoicePointer - (MenuItemPtr) a pointer to the chosen (Sub)Item.     *)
  104. (*                                                                         *)
  105. (*    If no SubItem is chosen, then SubItemChosen will equal NoSub; if no  *)
  106. (* Item is chosen, then ItemChosen will equal NoSub and MenuChosen will    *)
  107. (* equal NoMenu. NoSub, NoItem and NoMenu can be found in the Intuition    *)
  108. (* definition module. ChoicePointer will equal NULL if no choice is made.  *)
  109. (*                                                                         *)
  110. (***************************************************************************)
  111.  
  112.    PROCEDURE GetMenuChoice  (MenuSelection  : CARDINAL;
  113.                              FirstMenu      : MenuPtr;
  114.                              VAR MenuChoice : ChoiceType);
  115.  
  116.    VAR
  117.       ChoiceAddress : ADDRESS;
  118.       
  119.    BEGIN
  120.       WITH MenuChoice DO
  121.          MenuChosen    := MenuNum (MenuSelection);
  122.          ItemChosen    := ItemNum (MenuSelection);
  123.          SubItemChosen := SubNum  (MenuSelection);
  124.          ChoiceAddress := ItemAddress (FirstMenu^, MenuSelection);
  125.          ChoicePointer := MenuItemPtr (ChoiceAddress);
  126.       END; (* WITH MenuChoice *)
  127.    END GetMenuChoice;
  128.    
  129.    
  130. BEGIN
  131. END MessageTools.
  132.